package com.zenithmind.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.common.result.PageResult;
import com.zenithmind.user.pojo.domain.EmailLog;
import com.zenithmind.user.pojo.dto.EmailRequestDTO;
import com.zenithmind.user.pojo.query.EmailLogQuery;
import com.zenithmind.user.pojo.vo.EmailLogVO;

import java.util.List;

/**
 * 邮件服务接口
 */
public interface EmailService extends IService<EmailLog> {
    
    /**
     * 发送简单文本邮件（使用DTO）
     * 
     * @param emailRequestDTO 邮件请求DTO
     * @return 邮件日志记录
     */
    EmailLog sendSimpleEmail(EmailRequestDTO emailRequestDTO);
    
    /**
     * 发送简单文本邮件
     * 
     * @param to 收件人邮箱
     * @param subject 邮件主题
     * @param content 邮件内容
     * @return 邮件日志记录
     */
    EmailLog sendSimpleEmail(String to, String subject, String content);
    
    /**
     * 发送HTML邮件（使用DTO）
     * 
     * @param emailRequestDTO 邮件请求DTO
     * @return 邮件日志记录
     */
    EmailLog sendHtmlEmail(EmailRequestDTO emailRequestDTO);
    
    /**
     * 发送HTML邮件
     * 
     * @param to 收件人邮箱
     * @param subject 邮件主题
     * @param htmlContent HTML邮件内容
     * @return 邮件日志记录
     */
    EmailLog sendHtmlEmail(String to, String subject, String htmlContent);
    
    /**
     * 发送验证码邮件
     * 
     * @param to 收件人
     * @param code 验证码
     * @return 邮件日志记录
     */
    EmailLog sendVerificationCode(String to, String code);
    
    /**
     * 发送验证码邮件（带类型）
     * 
     * @param to 收件人
     * @param code 验证码
     * @param type 验证码类型(0:登录, 1:注册, 2:重置密码)
     * @return 邮件日志记录
     */
    EmailLog sendVerificationCode(String to, String code, int type);
    
    /**
     * 获取邮件发送历史
     *
     * @param emailRequestDTO 邮件请求DTO，包含邮箱和查询数量限制
     * @return 邮件日志列表
     */
    List<EmailLog> getEmailHistory(EmailRequestDTO emailRequestDTO);
    
    /**
     * 获取邮件发送历史
     * 
     * @param email 收件人邮箱
     * @param limit 查询数量限制
     * @return 邮件日志列表
     */
    List<EmailLog> getEmailHistory(String email, int limit);
    
    /**
     * 分页查询邮件记录
     *
     * @param emailLogQuery 邮件查询条件，包含分页信息和查询条件
     * @return 分页邮件记录
     */
    PageResult<EmailLogVO> pageEmailLogs(EmailLogQuery emailLogQuery);
    
    /**
     * 统计邮件发送情况
     *
     * @return 统计数据
     */
    Object getEmailStatistics();
} 